package it.crosato.stage.server.model.retriever;

import it.crosato.stage.shared.exceptions.NonExistentException;
import it.crosato.stage.shared.exceptions.RetrievingException;
import it.crosato.stage.shared.objects.Reaction;

import java.util.Vector;

public interface IReactionRetriever {

	/**
	 * Recupera una reazione gestendo internamente le interazioni con la banca
	 * dati interna e KEGG.
	 * @param id codice della reazione
	 * @param pathway codice della specifica via metabolica
	 * @param pathwayEnzymes lista degli enzimi presenti nella via metabolica
	 * @param time tempo di scadenza nella banca dati interna
	 * @return la reazione richiesta con tutte le sue informazioni
	 * @throws RetrievingException se si verificano problemi nel recupero
	 * @throws NonExistentException se la reazione o la via metabolica non esistono
	 */
	public abstract Reaction getReaction(String id, String pathway, Vector<String> pathwayEnzymes, long time) 
			throws RetrievingException, NonExistentException;

	/**
	 * Recupera tutte le reazioni di una via metabolica gestendo internamente le
	 * interazioni con la banca dati interna e KEGG.
	 * @param pathway codice della via metabolica
	 * @param reactionsIds lista dei codici delle reazioni della via metabolica
	 * @param pathwayEnzymes lista degli enzimi presenti nella via metabolica
	 * @param time tempo di scadenza nella banca dati interna
	 * @return la lista delle reazioni, con tutte le loro informazioni, presenti nella
	 * via metabolica
	 * @throws RetrievingException se si verificano problemi nel recupero
	 * @throws NonExistentException se la via metabolica non esiste
	 */
	public abstract Vector<Reaction> getPathwayReactions(String pathway, Vector<String> reactionsIds,
			Vector<String> pathwayEnzymes, long time) throws RetrievingException, NonExistentException;
	
}